package com.neucloud.da.edgeside.model.service;

import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;

public interface IStorageService {

    /**
     * @MethodName bucketExist
     * @Description bucket是否存在
     * @Param
     * @param bucketName
     * @return java.lang.Boolean
     **/
    Boolean bucketExist(String bucketName);

    /**
     * @MethodName createBucket
     * @Description 创建存储桶
     * @Param
     * @param bucketName
     * @return void
     **/
    void createBucket(String bucketName);

    /**
     * @MethodName deleteBucket
     * @Description 删除Bucket
     * @Param
     * @param bucketName
     * @return void
     **/
    void deleteBucket(String bucketName);

    /**
     * @MethodName uploadFile
     * @Description 上传文件
     * @Param
     * @param bucketName
     * @param objectName
     * @param file
     * @return void
     **/
    void uploadFile(String bucketName, String objectName, MultipartFile file);

    /**
     * @MethodName uploadFile
     * @Description 上传文件
     * @Param
     * @param bucketName
     * @param objectName
     * @param fileStream
     * @param fileSize
     * @return void
     **/
    void uploadFile(String bucketName, String objectName, InputStream fileStream, Long fileSize);

    /**
     * @MethodName deleteObject
     * @Description 删除对象
     * @Param
     * @param bucketName
     * @param objectName
     * @return void
     **/
    void deleteObject(String bucketName, String objectName);

    /**
     * @MethodName generateUrl
     * @Description 生成地址
     * @Param
     * @param bucketName
     * @param objectName
     * @return java.lang.String
     **/
    String generateUrl(String bucketName, String objectName);

    /**
     * @MethodName objectExist
     * @Description 检测文件是否存在
     * @Param
     * @param bucketName
     * @param objectName
     * @return void
     **/
    void objectExist(String bucketName, String objectName);

    /**
     * @MethodName getObject
     * @Description 下载对象
     * @Param
     * @param bucketName
     * @param objectName
     * @return com.amazonaws.services.s3.model.S3Object
     **/
    InputStream getObject(String bucketName, String objectName);

    /**
     * @MethodName getObjectContent
     * @Description 获取对象内容
     * @Param
     * @param bucketName
     * @param objectName
     * @return java.lang.String
     **/
    String getObjectContent(String bucketName, String objectName);

    /**
     * @MethodName copyObject
     * @Description 拷贝对象
     * @Param
     * @param srcBucketName
     * @param srcObjectName
     * @param targetBucketName
     * @param targetObjectName
     * @param isDirect 是否拷贝目录
     * @return void
     **/
    boolean copyObject(String srcBucketName, String srcObjectName, String targetBucketName, String targetObjectName, boolean isDirect);

    /**
     * @MethodName downObject
     * @Description 下载对象
     * @Param
     * @param bucketName bucker名称
     * @param objectName 目标对象
     * @param localPath 本地存储路径
     * @return void
     **/
    boolean downObject(String bucketName, String objectName, String localPath);

    /**
     * @MethodName calculate
     * @Description 获取对象大小
     * @Param
     * @param bucketName
     * @param objectName
     * @return long
     **/
    long calculate(String bucketName, String objectName);

}
